VPCピアリングを作りながら学んでみた
おはようございます、加藤です。WWDC 2018でiPhone SE2が来るかと期待していましたが、見事に夢破れました。
VPCピアリングを使用する機会があったので、構築しながら勉強してみました。
概要
できること
異なるVPCを接続
当然ですね、VPCピアリングによって異なるVPCを接続することができます。VPC間で直接接続する為、インスタンスにパブリックIPアドレスが割り当てらている必要はありません。
また、IPv6アドレスでも利用することが可能です。
異なるAWSアカウントのVPCを接続
VPCピアリングはAWSアカウントに依存しません。異なるアカウント間でVPCピアリングを利用することができます。
異なるリージョンのVPCを接続
VPCピアリングはリージョンに依存しません。異なるリージョン間でVPCピアリングを利用することができます。
ただし、IPv6アドレスは非対応です。
複数のVPCとピアリング
VPCピアリングは1:Nの接続をサポートしています。デフォルトの制限値は50で上限緩和リクエストによって最大125まで緩和できます。
ただし、ネットワークパフォーマンスに影響がでる場合があります。また、合わせてルートテーブルの上限緩和が必要になる可能性があります。大規模なピアリングを行う場合は、しっかりと計画しましょう。
できないこと
CIDRブロックが一致・重複するVPC間のピアリング
CIDRブロックが一致または重複する VPC 間で VPC ピアリング接続を作成することはできません。
重複していないCIDR ブロック間の通信にのみが必要であったとしても、いずれかのCIDR ブロックが重複している場合は、VPC ピアリング接続を作成することはできません。
ピアリング先のVPCを経由する通信
オンプレチックな考え方だとできそうと思ってしまいますが、NGです。具体的な例を上げていきます。
ピアリング先のVPCがピアリングしているVPCに直接通信することはできません。
ピアリング先のVPCが接続しているVPN/DXを経由してオンプレミスと直接通信することはできません。
ピアリング先のVPCのインターネットゲートウェイ/NATデバイスを経由してインターネットに直接通信することはできません。
ピアリング先のVPCエンドポイントを経由してAWSリソースに直接通信することはできません。
やってみた
以下の条件でVPCピアリングを試してみました。
- 同一アカウント
- 異なるリージョン
- ap-northeast-1, ap-southeast-1
- EC2(VPC A) →SSH→ EC2(VPC 2)
VPC,EC2
本筋では無いのでTerraformで構築しました。コードはGithubで公開しています。
雑い & 英語が変かもしれませんが生暖かい目で御覧ください\(^o^)/
Terraformについてはこちらのブログをどうぞ
VPCピアリング
AWSマネジメントコンソールでピアリング接続の画面を開き、「ピアリング接続の作成」をクリックします。
フォームに値を入力します。
項目 | 説明 |
ピアリング接続ネームタグ | リソースを識別する為のNameタグ 任意の文字列を入力する |
VPC(リクエスタ) | 接続元のVPCのIDを入力する |
アカウント | 接続先VPCをAWSアカウントに応じて選択する |
リージョン | 接続先VPCをリージョンに応じて選択する |
VPC(アクセプタ) | 接続先のVPCのIDを入力する |
これで接続先にVPCピアリングのリクエストが飛びます。
リージョンをシンガポールに切り替えて承認を行います。
ルートテーブル
VPC間は接続されましたが、ルートテーブルを定義しないと通信ができません。
それぞれのVPCのルートテーブルにルートを追加します。
VPC A
送信先 | ターゲット |
10.1.0.0/16 | VPC Aのピアリング接続(pcx-aaaabbbb) |
VPC B
送信先 | ターゲット |
10.0.0.0/16 | VPC Aのピアリング接続(pcx-bbbbaaaa) |
セキュリティグループ
VPC AのEC2からVPC BのEC2に対してSSHを許可します。
VPCピアリングが接続されていますが、送信元/送信先にセキュリティグループを指定することが可能です。
ただし、別リージョンの場合はできません。つまり、今回はCIDRブロックで指定する必要があります。
VPC B側のセキュリティグループに受信設定を追加します。
タイプ
|
プロトコル
|
ポート範囲
|
ソース
|
SSH (22)
|
TCP (6)
|
22
|
10.0.0.0/16
|
動作確認
EC2 AにSSH接続
ssh -l ec2-user [EC2 A Public IPAddr] curl -s https://checkip.amazonaws.com [EC2 A Public IPAddr]
EC2 A経由でEC2 BにSSH接続
SSH Configを作成
Host EC2A Hostname [EC2 A Public IPAddr] User ec2-user IdentityFile ~/.ssh/id_rsa Host EC2B Hostname [EC2 B Private IPAddr] User ec2-user IdentityFile ~/.ssh/id_rsa ProxyCommand ssh -W %h:%p EC2A
ssh EC2B curl -s https://checkip.amazonaws.com [EC2 B Public IPAddr]
EC2それぞれのパブリックIPアドレスが表示されれば成功です❗
あとがき
できないことについても作って検証したかったですが、そこそこの長さになってしまったので一旦切り上げました。今後、Terraformをアップデートして引き続き勉強&ブログにしようと思います。
VPCピアリングしている際にVPCをまたいで、セキュリティグループの送信元にセキュリティグループを指定できるという知識はあったのですがリージョンをまたぐとできないという事が抜けていました。構築している際に、少しハマってしまいました...